﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Web.Mvc;
using projectManagementWeb.Validations;

namespace projectManagementWeb.Models.ProjectLeader
{
    /// <summary>
    /// Model class to contain all the tasks being displayed and handled in the Project Lead Task list screen.
    /// </summary>
    public class ProjectLeadTaskListModel
    {

        /// <summary>
        /// ID del proyecto, necesario para las queries a la base de datos 
        /// </summary>
        int _projectLeaderID = 0;
        /// <summary>
        /// Constant to add the empty value to the dropbox
        /// </summary>
        public const string DUMMY_ID = "111111";
        /// <summary>
        /// Referencia a la base de datos
        /// </summary>
        projectmanagementDBDataContext _dbContext = null;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="projectID">ID del proyecto</param>
        public ProjectLeadTaskListModel()
        {
   
            _dbContext = new projectmanagementDBDataContext();
        }


        public int ProjectLeaderID { 
            get
            {
                return this._projectLeaderID;
            }
                
            set 
            {
                this._projectLeaderID = value;
            }
         
        }

        /// <summary>
        /// Propiedad para obtener la lista de tareas de un proyecto determinado
        /// </summary>
        /// 
        [Required(ErrorMessage = "El campo '{0}' es requerido")]
        [ProjectLeaderTaskListValidation]
        public List<ProjectLeadTaskDescriptionModel> TaskList { get; set; }
        
        /// <summary>
        /// Propiedad para mapear las banderas de status con sus respectivos IDs
        /// </summary>
        public IEnumerable<SelectListItem> StatusList
        {
            get
            {

                IEnumerable<SelectListItem> projectLeaderID = _dbContext.spGetAllowedStatusFlags(" ")
            .Select(i => new SelectListItem
            {
                Value = i.ID.ToString(),
                Text = i.name.ToString()
            });

                return projectLeaderID;
            }
        }

        /// <summary>
        /// Propiedad para mapear las banderas de status con sus respectivos IDs
        /// </summary>
        public IEnumerable<SelectListItem> UserList
        {
            get
            {

                IEnumerable<SelectListItem> projectLeaderID = _dbContext.GetAvailableUsers(_projectLeaderID)
            .Select(i => new SelectListItem
            {
                Value = i.id.ToString(),
                Text = i.FirstName.ToString() + " " + i.LastName.ToString()
            });

                IEnumerable<SelectListItem> dummyUser = new SelectListItem[] { new SelectListItem { Value = DUMMY_ID, Text = " " } };
                //Insert the empty value
                projectLeaderID = dummyUser.Concat(projectLeaderID);

                return projectLeaderID;
            }
        }

        /// <summary>
        /// Propiedad para mapear las banderas de status con sus respectivos IDs
        /// </summary>
        public IEnumerable<SelectListItem> ModuleList
        {
            get
            {
                
                IEnumerable<SelectListItem> projectLeaderID = _dbContext.spGetProjectModules(this._projectLeaderID)
                .Select(i => new SelectListItem
                {
                    Value = i.ID.ToString(),
                    Text = i.name.ToString()
                });

               // IEnumerable<SelectListItem> dummyUser = new SelectListItem[] { new SelectListItem { Value = DUMMY_ID, Text = " " } };
                //Insert the empty value
                //projectLeaderID = dummyUser.Concat(projectLeaderID);

                return projectLeaderID;
                 
            }
        }
    }

    
}